Node 支持 ES Module 的解决方案
webpack
配置
target: 'node'时,才会引入path等node内置库垫片
JS垫片就是,在低级环境中用高级语法时,在低级环境中手动实现该高级功能,模拟高级环境。形象的解释:垫片的作用就是,使四只脚不一样长的桌子变得平稳,为什么不平稳,因为每个脚的js语法版本不一样。
@babel/plugin-transform-runtime的作用是,提供“垫片”,例如regeneratorRuntime的“垫片” --regeneratorRuntime的实现。以下错误是因为缺少@babel/plugin-transform-runtime插件。webpack://Node_ES_Module/./core/index.js?:17 _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { ^ ReferenceError: regeneratorRuntime is not definedbabel的配置还需要安装
@babel/runtime-corejs3库use: { loader: 'babel-loader', options: { presets: [ '@babel/preset-env' ], plugins: [ ['@babel/plugin-transform-runtime', { corejs: 3, regenerator: true, useESModules: true, helpers: true }] ] } },
Node 原生支持
将要执行的
js文件和其依赖的js文件后缀改为mjs使用以下命令执行
node --experimental-modules index.mjsnode14 之后默认支持 ES Module,直接执行以下命令即可,不需要option--experimental-modulesnode index.mjs